home *** CD-ROM | disk | FTP | other *** search
- /* sample application using curses calls, this takes about 25 seconds on the */
- /* Atari and over 6 minutes on a mainframe, using a vt100 on a 4800 baud */
- /* line. Even on the mainframe it uses 24 seconds of computation time. */
- /* see copyright notice in curses.c */
- /* #include "portab.h" forbidden in MW C */
-
- #include "curses.h"
-
- #define NCOLS 80
- #define NLINES 24
- #define MAXPATT 4
-
- #ifndef MEGAMAX
- extern unsigned rand();
- #endif
-
- struct locs {
- char y,x ;
- } ;
-
- typedef struct locs LOCS ;
-
- LOCS Layout[NCOLS*NLINES] ;;
-
- int pat ;
- int nstar ;
-
- main()
- {
- int i ;
-
- initscr() ;
- if (ERR) {
- fprintf(stderr, "Unable to initialize\n");
- exit(1);
- }
- leaveok(stdscr,1) ;
- for ( i = 0 ; i < 10 ; i++ )
- {
- if (ERR) {
- fprintf(stderr, "Error in makeboard loop\n");
- exit(2);
- }
- makeboard() ;
- puton('*') ;
- puton(' ') ;
- } ;
- endwin() ;
- }
-
- makeboard()
- {
- int y,x ;
- LOCS *lp ;
-
- pat = rand() % MAXPATT ;
- lp = Layout ;
- for ( y = 0 ; y < NLINES ; y++ )
- for ( x = 0 ; x < NCOLS ; x++ )
- if ( ison(y,x) )
- {
- lp->y = y ;
- lp->x = x ;
- lp++ ;
- } ;
- nstar = lp - Layout ;
- }
-
- ison(y,x)
- int y,x ;
- {
- switch ( pat )
- {
- case 0:
- return(!(y & 0x01)) ;
- case 1:
- if ( x >= NLINES && y >= NCOLS )
- return(0) ;
- if ( y < 3 || y >= NLINES - 3 )
- return(1) ;
- return((x < 3 || x >= NCOLS - 3 )) ;
- case 2:
- return(((x+y) & 0x01)) ;
- case 3:
- return(( y>= 9 && y <= 15 )) ;
- } ;
- }
-
- puton(ch)
- char ch ;
- {
- LOCS *lp, *end, temp ;
- int r ;
-
- end = &(Layout[nstar]) ;
- for ( lp = Layout ; lp < end ; lp++ )
- {
- r = rand() % nstar ;
- temp = *lp ;
- *lp = Layout[r] ;
- Layout[r] = temp ;
- } ;
- for ( lp = Layout ; lp < end ; lp++ )
- {
- mvaddch(lp->y,lp->x,ch) ;
- refresh() ;
- } ;
- }
-
-